package com.dufang.thread05SafeOrNo;

/**
 * @ClassName:MyTicketSafe
 * @Description 线程安全:method 非静态
 * 非静态同步方法：格式：修饰符 synchronized 返回值类型 方法名（参数）{
*                                方法体
*                                return 结果
 *                   }
 *
 * 静态同步方法：格式：修饰符 static synchronized 返回值类型 方法名（参数）{
 *                                 方法体
 *                                 return 结果
 *                   }
 * 默认锁：class对象
 * @Author Administrator
 * @Date 2025/7/7/007 8:04
 * @Version 1.0
 **/
public class MyTicketSafe implements Runnable{
    //定义100张票
    int ticket=100;

    //任意new一个对象  相当于一把锁
//    Object obj=new Object();

    @Override
    public void run() {
        while(true){
            try{
                Thread.sleep(100L);
            }catch (InterruptedException e){
                throw new RuntimeException(e);
            }

            method1();
//            method2();
          /*  synchronized (obj){
                if(ticket>0){
                    System.out.println(Thread.currentThread().getName()+"买了第"+ticket+"张票");
                    ticket--;
                }
            }*/
        }
    }

    public synchronized void method1(){
        if(ticket>0){
            System.out.println(Thread.currentThread().getName()+"买了第"+ticket+"张票");
            ticket--;
        }
    }

    public void method2(){
        synchronized (this) {
            if (ticket > 0) {
                System.out.println(Thread.currentThread().getName() + "买了第" + ticket + "张票");
                ticket--;
            }
        }
    }
}
